/* 
 * @moduleName: DBForm.js
 * @Desc: form表单新增编辑 这个模块emmmmm...自己看吧 我也不知道怎么说..
 * @Author: djkloop 
 * @Date: 2017-11-28 15:48:44 
 * @Last Modified by: djkloop
 * @Last Modified time: 2017-12-14 13:44:40
 */
import React, { Component } from 'react'
import InnerForm from './InnerForm' 
import Loading from '../../common/Loading/Loading'
// 这里它是FormUtil 
import FormUtil from '../../DBUtils/DBUtils'
import Logger from '../../utils/Logger';
import {connect} from 'react-redux';
import {insert, search} from '../../redux/form.redux'
import * as types from '../../redux/types'
import {withRouter} from 'react-router-dom'
const logger = Logger.getLogger('DBForm');

@connect(state => state.resMessage, {insert,search})
@withRouter
class DBForm extends Component {
  constructor(props) {
    super(props)
    this.state = {
      // 远处加载schema表应该有相对应的的状态来控制
      loadingSchema: false,
      resObj: {},
      pageSize: 10
    }
  }
  componentWillMount() {
    // 从远处加载schema
    FormUtil.tryGetSchema(this.props, (res) => {
      // 拿到schema获取啥啥啥...
      // 这个地方不用二次加载了 直接在form里面刷新就好了
      this.setState({resObj:FormUtil.updateState(res)})
    })
  }
  // 这个地方我的觉得还是用tableName好点。因为你的新增页面对的肯定是table页面

  // 这个handleFormSubmit 能不能调用一个redux公共的方法呢?
  // 我的理解是不用的。因为这本身就是个公共组件 方法都是一样的只不过schema不一样而已。
  // 但最后考虑到可能其他组件也要用到这个公共的CRUD我觉得还是提到redux里面去吧...
  // 这个地方我后期在想能不能把业务逻辑分到各个页面上 这样就避免了单页面逻辑过长造成难以维护的问题
  handleFormSubmit = async (tableName,queryObj) => {
    logger.debug('handleFormSubmit, queryObj = %o', queryObj);
    // 这时查询条件已经变了, 要从第一页开始查
    await this.props.insert(tableName,queryObj);
    if (this.props.resMessage.code === types.SUCCESS_CODE) {
    } else {
    }
  };

  refresh = async() => {
    const {tableName, inited, queryObj} = this.state.resObj
    // 如果加载schema失败, 就不要查询了
    if (!inited) {
      return;
    }
    await this.props.search(tableName, queryObj);
    //message.success('查询成功');
    if (this.props.resMessage.code === types.SUCCESS_CODE) {
      this.setState({
        data: this.props.resMessage.data
      })
    } else {
    }
  };

  handleFormSearch = async (tableName,queryObj,page) => {
    await this.props.search(tableName,{queryObj,page:page, pageSize:this.state.pageSize});
    if (this.props.resMessage.code === types.SUCCESS_CODE) {
    } else {
    }
  }

  componentDidMount() {
  }

  // 这个地方从table那边点击完之后要把pageSize拿到其他地方需要用.
  componentWillReceiveProps(vvv) {
    this.setState({pageSize:vvv.dbtalePageSize})
  }

  render() {
    const {type} = this.props;
    const {tableConfig,querySchema,tableName,schema} = this.props.tableName ? this.props : this.state.resObj;
    return this.state.loadingSchema || querySchema === void 0 ? <Loading cls="danger" tip={`远程 "${this.props.match.params.tableName}" FormSchema正在加载...`} delay={1000} size="large" /> : (
      <div>
        <InnerForm parentHandleSearch={this.handleFormSearch} parentHandleSubmit={this.handleFormSubmit} type={type} tableConfig={tableConfig} schema={querySchema === void 0 ? schema : querySchema} tableName={tableName}></InnerForm>
      </div>
    )
  }
}

export default DBForm;
